/*
 * Copyright 2007 Brian Watkins
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

package bw.util;

public class Worker extends Agent
{
    private String _name = null;
    private BlockingQue _que = new BlockingQue();
    private WorkerListener _listener = null;

    //An Agent that blocks waiting to do more work

    public Worker ( String name )
    {
        super( name, 0L );

        _name = name;
    }

    public void addWork ( Runnable work )
    {
        _que.add( work );
    }

    public void performAction ()
    {
        Runnable work = (Runnable) _que.remove();
        if ( work != null ) 
        {
            work.run();

            if ( _listener != null )
            {
                _listener.workCompleted( this, work );
            }
        }
    }

    public void setListener ( WorkerListener listener )
    {
        _listener = listener;
    }

}